package com.tianya.common.action;
import java.net.URLEncoder;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.mapper.ActionMapper;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import org.apache.struts2.dispatcher.mapper.RestfulActionMapper;
import com.opensymphony.xwork2.ActionSupport;
import com.tianya.common.util.Utility;
@SuppressWarnings("serial")
public class BaseAction extends ActionSupport {

	/**
	 *  画面的确认模式
	 */
	public static String CONFIRM = "confirm";
	/**
	 * 画面初始化模式
	 */
	public static String INIT = "init";
	/**
	 * 画面为检索模式
	 */
	public static String SEARCH = "search";
	/**
	 * 画面为编辑模式
	 */
	public static String EDIT = "edit";
	/**
	 * 画面为只读模式
	 */
	public static String VIEW = "view";
	/**
	 * 画面为删除模式
	 */
	public static String DELETE = "delete";
	/**
	 * 画面为添加模式
	 */
	public static String ADD = "add";
	
	/**
	 * 画面的模式
	 */
	private String formMode;
	/**
	 * 画面参数
	 */
	private String formParam;
	/**
	 * 查询分页数【单页显示记录数】
	 */
	protected int pageSize;
	/**
	 * 错误消息类
	 */
	/**
	 * 当前请求Session
	 */
	protected HttpSession session ;
	/**
	 * 当前请求
	 */
	protected HttpServletRequest request ;
	/**
	 * 当前请求response
	 */
	protected HttpServletResponse response ;
	/**
	 * 日志对象
	 */
	protected Logger logger = Logger.getLogger(this.getClass());

	
	/**
	 * 初始化请求对象
	 */
	public void initBaseAction()
	{
		request = ServletActionContext.getRequest();
		response = ServletActionContext.getResponse();
		session = request.getSession();
	}
	/**
	 * 将页面得到的带格式的日期转化成8位串到Dao中
	 * @param date 日期字符串
	 * @return 8为格式日期[yyyyMMdd]
	 */
	public String dateActionToDao(String date){
		try {
			return Utility.dateToString(Utility.parseStringToDate(date));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 * 将Dao得到的8位串转化成到中带格式的日期用于页面显示
	 * @param date 8位日期格式
	 * @return 用户指定的日期格式
	 */
	

	/**
	 * 获取画面参数
	 * @return 画面参数
	 */
	public String getFormParam()
	{
		return this.formParam;
	}
	/**
	 * 设置画面参数
	 * @param formparam
	 */
	public void setFormParam(String formparam)
	{
		this.formParam = formparam;
	}
	
	/**
	 * 画面重置Action
	 * @return 处理结果
	 * @throws Exception
	 */
	public String actionClear()throws Exception 
	{
		return SUCCESS;
	}
	
	

	public String actionExecute() throws Exception 
	{
		return SUCCESS;
	}
	/**
	 * 画面输入检查
	 */
	public void validateExecute()
	{
		
	}
	

	/**
	 * 确认处理Action
	 * @return 处理结果
	 * @throws Exception
	 */
	public String  actionConfirm() throws Exception 
	{
		return SUCCESS;
	}
	/**
	 * 检证确认处理Action
	 */
	public void validateConfirm()
	{
		
	}

	/**
	 * 根据Acion名字获取全路径
	 * @param action action名字
	 * @return 完整路径
	 */
	public String getURLByAction(String action)
	{
		return getURLByAction(action,null,null);
	}
	
	/**
	 * 判断是否有权限
	 * @return 结果
	 */
	
	
	/**
	 * 获取Action的路径
	 * @param action action名称
	 * @param namespace 包名【空间名称】
	 * @param params 参数
	 * @return action完整路径
	 */
	public String getURLByAction(String action,String namespace,Map<String,String> params)
	{
		try
		{
			initBaseAction();
			int index = request.getRequestURL().lastIndexOf(".");
			String extension = request.getRequestURL().substring(index);
		
			ActionMapper mapper = new RestfulActionMapper();   
			ActionMapping mapping = mapper.getMapping(request, null);
			if(mapping == null)
			{
				String url = request.getContextPath() + "/";
				if(namespace == null || namespace.equals(""))
				{
					url+= action+extension;
				}
				else
				{
					url+= namespace+"/"+action+extension;
				}
				String temp = "?";
				if(params != null)
				{
					for(String key:params.keySet())
					{
						if(url.indexOf('?')>= 0)
						{
							temp = "&";
						}
						else
						{
							temp = "?";
						}
						url += temp+key+"="+URLEncoder.encode(params.get(key),"UTF-8");
					}
				}
				return url;
			}
			mapping.setNamespace(request.getContextPath() + "/");   
			mapping.setName(action+extension);   
			if(namespace == null || namespace.equals(""))
			{
 	
			}
			else
			{
				mapping.setNamespace("/"+namespace+"/");
			}
		
			return mapper.getUriFromActionMapping(mapping);
		}
		catch(Exception e)
		{
			return null;
		}
	}

	/**
	 * 获取画面模式
	 * @return 画面模式
	 */
	public String getFormMode() {
		return formMode;
	}

	/**
	 * 设置画面模式
	 * @param formMode 画面模式
	 */
	public void setFormMode(String formMode) {
		this.formMode = formMode;
	}
	
}
